﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using ArmaTuCumpleModel.Model;
using ArmaTuCumpleModel.Repository;
using System.Web.Mvc.Ajax;
using System.IO;

namespace ArmaTuCumpleWeb.Controllers
{
    //Guarda la descripción de una foto
    public class FileDescription
    {
        public string Name { get; set; }
        public string WebPath { get; set; }
        public long Size { get; set; }

    }

    public class ServiciosUsuariosController : Controller
    {

        //Referencia a los repositorios
        RepServiciosUsuario RepositorioServicios = new RepServiciosUsuario();
        //Sube una foto
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Upload()
        {
            foreach (string inputTagName in Request.Files)
            {
                HttpPostedFileBase file = Request.Files[inputTagName];
                if (file.ContentLength > 0)
                {
                    string filePath = Path.Combine(HttpContext.Server.MapPath("../Uploads")
                        , Path.GetFileName(file.FileName));
                    file.SaveAs(filePath);
                }
            }

            return RedirectToAction("PublicarServicio");

        }

        //
        // GET: /ServiciosUsuarios/

        //Retorna la vista con los servicios disponibles
        public ActionResult Index()
        {
            //Recoge los servicios
            IQueryable<Servicio> lista = RepositorioServicios.ObtenerTodoServicios();
            //Retorna la vista y los servicio
            return View("VerDisponibles", lista);
        }

        //Metodo que retorna la vista de publicar un servicio
        public ActionResult PublicarServicio()
        {
            return View("PublicarServicio");
        }

        //Recoge los datos de la publicación de un servicio
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult PublicarServicio(Servicio temp)
        {
           
            //Rellena los datos con los recogidos con la vista
            temp.id_servicio = Guid.NewGuid();
            temp.id_ofrece = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
            temp.tipo = Guid.Parse(Request.Form["ctl00$MainContent$DropDownList1"]);
            //Agrega el servicio a la BD
            RepositorioServicios.AgregarServicio(temp);
            //Guarda el ultimo movimiento
            RepositorioServicios.Guardar();
            //Retorna una vista
            return RedirectToAction("Index");
        }

        //Retorna la vista para editar un servicio
        public ActionResult Editar()
        {
            return View("Editar");
        }

        //Recoge los datos de la Edición
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Editar(Guid id, FormCollection formvalues)
        {
            //Busca el servicio
            Servicio serv = RepositorioServicios.ObtenerServicioId(id);
            //Lo actualiza
            UpdateModel(serv, formvalues);
            //Guarda el ultimo movimiento
            RepositorioServicios.Guardar();
            //Retorna una vista
            return RedirectToAction("Index");

        }

        //Retorna la vista con los detalles de un sericio
        public ActionResult Detalles(Guid id)
        {
            //Buscamos el servicio
            Servicio serv = RepositorioServicios.ObtenerServicioId(id);
            //Lo retornamos junto con la vista
            return View("Detalles", serv);
        }

        //Metodo que elimina un servicio
        public ActionResult Eliminar(Guid id)
        {
            //Buscamos el servicio
            Servicio serv = RepositorioServicios.ObtenerServicioId(id);
            //Lo eliminamos
            RepositorioServicios.EliminarServicio(serv);
            //Guardamos el ultimo movimiento
            RepositorioServicios.Guardar();

            //retornamos una vista
            return RedirectToAction("Index");
        }

        //Metodo que muestra los servicios de un usuario
        public ActionResult MisServicios()
        {
            //Vemos el Id de un Usuario
            Guid id_user = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
            //Recogemos sus servicios
            IQueryable<Servicio> lista = RepositorioServicios.ObtenerServiciosUsuarioId(id_user);
            //Retornamos la vista con la lista de servicios
            return View("MisServicios", lista);
        }

        
     



    }
}
